{
 "metadata": {
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.6-final"
  },
  "orig_nbformat": 2,
  "kernelspec": {
   "name": "python37764bit5d211478a4cf4a3d93a2c891f6a9207d",
   "display_name": "Python 3.7.7 64-bit"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2,
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "&#39;aaa&#39;"
     },
     "metadata": {},
     "execution_count": 1
    }
   ],
   "source": [
    "'''\n",
    "while 和 if 语句中 可以使用任意操作，而不仅仅是比较操作\n",
    "\n",
    "比较操作符 \n",
    "in 和 not in 校验一个值是否在（或不在）一个序列里。\n",
    "is 和 is not 比较两个对象是不是同一个对象，这只对像列表这样的可变对象比较重要。\n",
    "\n",
    "所有的比较操作符都有相同的优先级，且这个优先级比数值运算符低。\n",
    "比较操作可以传递。例如 a < b == c 会校验是否 a 小于 b 并且 b 等于 c。\n",
    "比较操作可以通过布尔运算符 and 和 or 来组合，并且比较操作（或其他任何布尔运算）的结果都可以用 not 来取反。\n",
    "这些操作符的优先级低于比较操作符；not 优先级最高， or 优先级最低。\n",
    "因此 A and not B or C 等价于 (A and (not B)) or C。\n",
    "和之前一样，你也可以在这种式子里使用圆括号。\n",
    "\n",
    "布尔运算符 \n",
    "and 和 or 也被称为 短路 运算符：它们的参数从左至右解析，一旦可以确定结果解析就会停止。\n",
    "例如，如果 A 和 C 为真而 B 为假，那么 A and B and C 不会解析 C。当用作普通值而非布尔值时，短路操作符的返回值通常是最后一个变量。\n",
    "\n",
    "'''\n",
    "# 还可以用比较操作或者 逻辑表达式的结果赋值给一个变量\n",
    "str1, str2, str3 = '', 'aaa', 'bbb'\n",
    "non_null = str1 or str2 or str3\n",
    "non_null\n"
   ]
  }
 ]
}